﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;


namespace WindowsGame1.View
{
    class Camera
    {
        //fält
        private Vector2 _modelCenterPosition = new Vector2(0, 0);
        private float   _scale = 32.0f;

        //funktion för att dela med sig av skalan
        internal float GetScale()
        {
            return _scale;
        }

        //funktion för att ge vy-positionen för ett objekt
        internal Vector2 GetViewPosition(float x, float y, Vector2 a_viewPortSize)
        {
            Vector2 modelPosition = new Vector2(x, y);

            Vector2 modelViewPortSize = new Vector2(a_viewPortSize.X / _scale, a_viewPortSize.Y / _scale);

            //get model top left position
            Vector2 modelTopLeftPosition = _modelCenterPosition - modelViewPortSize / 2.0f;

            return (modelPosition - modelTopLeftPosition) * _scale;
        }

        //metod för att ställa in zoomen i kameran
        internal void SetZoom(float a_scale)
        {
            _scale = a_scale;
        }

        //metod som i uppgift ska rikta kameran mot spelaren
        internal void CenterOn(Vector2 a_newCenterPosition, Vector2 a_viewPortSize, Vector2 a_levelSize)
        {
            _modelCenterPosition = a_newCenterPosition;

            Vector2 modelViewPortSize = new Vector2(a_viewPortSize.X / _scale, a_viewPortSize.Y / _scale);

            //check left
            if (_modelCenterPosition.X < modelViewPortSize.X / 2.0f)
            {
                _modelCenterPosition.X = modelViewPortSize.X / 2.0f;
            }

            //ckeck right
            if (_modelCenterPosition.X > a_levelSize.X - modelViewPortSize.X / 2.0f)
            {
                _modelCenterPosition.X = a_levelSize.X - modelViewPortSize.X / 2.0f;
            }

            //check bottom
            if (_modelCenterPosition.Y > a_levelSize.Y - modelViewPortSize.Y / 2.0f)
            {
                _modelCenterPosition.Y = a_levelSize.Y - modelViewPortSize.Y / 2.0f;
            }

            //check top
            if (_modelCenterPosition.Y < modelViewPortSize.Y / 2.0f)
            {
                _modelCenterPosition.Y = modelViewPortSize.Y / 2.0f;
            }
        }
    }
}
